package com.atguigu.Bean;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 购物车对象
 */
public class C_cart {
    private Integer totalCount=0;
    private BigDecimal totalPrice=new BigDecimal(0);
    private Map<Integer,C_cartItem> items=new LinkedHashMap<>();

    public Integer getTotalCount() {
        return totalCount;
    }

    public BigDecimal getTotalPrice() {
        return totalPrice;
    }

    public Map<Integer, C_cartItem> getItems() {
        return items;
    }

    public void setItems(Map<Integer, C_cartItem> items) {
        this.items = items;
    }

    @Override
    public String toString() {
        return "C_cart{" +
                "totalCount=" + totalCount +
                ", totalPrice=" + totalPrice +
                ", items=" + items +
                '}';
    }

    /**
     * 添加商品项
     */
    public void addItem(C_cartItem c){
        //先检查购物车中是否添加过此商品：
        //添加过则该商品的数量(count)更新,总金额更新;
        //未添加过则直接放在集合中
        C_cartItem item = items.get(c.getId());
        if (item==null){
            //之前未添加过此商品
            items.put(c.getId(),c);
        }else {
            //之前添加过此商品
            item.setCount(item.getCount()+c.getCount());
            item.setTotalPrice(item.getTotalPrice().add(c.getTotalPrice()));
        }
        totalCount+=c.getCount();
        totalPrice=totalPrice.add(c.getTotalPrice());
    }

    /**
     * 删除商品项
     */
    public void deleteItem(Integer id){
        C_cartItem item = items.get(id);
        totalCount-=item.getCount();
        totalPrice=totalPrice.subtract(item.getTotalPrice());
        items.remove(id);
    }

    /**
     * 清空商品项
     */
    public void clear(){
        totalPrice=new BigDecimal(0);
        totalCount=0;
        items.clear();
    }

    /**
     * 修改某种商品项的数量
     */
    public void updateCount(Integer id,Integer count){
        C_cartItem item = items.get(id);
        if(item!=null){
            totalCount=totalCount-item.getCount()+count;
            item.setCount(count);
            totalPrice=totalPrice.subtract(item.getTotalPrice()).add(item.getPrice().multiply(BigDecimal.valueOf(item.getCount())));
            item.setTotalPrice(item.getPrice().multiply(BigDecimal.valueOf(item.getCount())));
        }
    }
}
